//package cn.enjoy.rabbitmq.config;
//
//import org.springframework.amqp.core.AcknowledgeMode;
//import org.springframework.amqp.core.Queue;
//import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
//import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.autoconfigure.AutoConfigureAfter;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//
///**
// * 消费端限流，配置手动接收、消费限制
// * SimpleMessageListenerContainer
// *
// * @author K
// */
//@Configuration
//@AutoConfigureAfter(RabbitMqConfiguration.class)
//public class ManualAckConfig {
//
//    @Autowired
//    private CachingConnectionFactory connectionFactory;
//    @Autowired
//    private ManualAckListener manualAckListener; //消息接收处理类
//
//
//    @Bean
//    public Queue directQueue() {
//        return new Queue("manualAck.queue", true);
//    }
//
//    @Bean
//    public SimpleMessageListenerContainer simpleMessageListenerContainer() {
//        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
//        // 设置并发消费者数量
//        container.setConcurrentConsumers(1);
//        // 设置并发消费者最大数量
//        container.setMaxConcurrentConsumers(1);
//        // 消费端限流 为每个客户端设置一次请求最大消费数量（每次拉取queue里消息的数量）
//        container.setPrefetchCount(1);
//        // RabbitMQ默认是自动确认，这里改为手动确认消息
//        container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
//        //设置队列
//        container.setQueueNames("manualAck.queue");
//        //同时设置多个队列  前提是队列都是必须已经创建存在的
//        //container.setQueueNames("TestDirectQueue","TestDirectQueue2","TestDirectQueue3");
//
//
//        //另一种设置队列的方法,使用addQueues
////        container.setQueues(new Queue("TestDirectQueue",true));
////        container.addQueues(new Queue("TestDirectQueue2",true));
////        container.addQueues(new Queue("TestDirectQueue3",true));
//
//        //实际的消费监听者
//        container.setMessageListener(manualAckListener);
//
//        return container;
//    }
//
//}
